/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import edu.albany.csi518.sick.CalculateConfidence;
import edu.albany.csi518.sick.DiseaseSymptom;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Anthony
 */
public class RefineSymptoms extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         response.setContentType("text/html;charset=UTF-8");
        
        try (PrintWriter out = response.getWriter()) {
            DiseaseSymptom disease_symptom;
            HttpSession session = request.getSession();
            String checkboxVal;
            CalculateConfidence confidence;

        //Query query = new Query();
            boolean debugger = false;

            disease_symptom = (DiseaseSymptom) session.getAttribute("dis_symp_obj");

            try {

                if (disease_symptom == null) {
                    out.println("<h3> Obj was null</h3>");
                } else {
                   Iterator<Map.Entry<String, Integer>> symIt = disease_symptom.getRankedSymtomsIt();
                    Map.Entry<String, Integer> next;
                    String selectedSymptoms = "";
                    confidence = new CalculateConfidence(disease_symptom);
                    
                    //out.print("<h2>Result</h2>");
                    String symptom = request.getParameter("symptom");
                    String symptoms[] = null;
                    if(symptom != null) {
                        symptoms = symptom.split("_");
                    }
                    else {
                        symptom = "";
                    }
                    
                    checkboxVal = request.getParameter("checked");
                    
                    
                    for (int i = 1; symIt.hasNext(); i++) {
                        next = (Map.Entry<String, Integer>) symIt.next();
                        for(int j = 0; j < symptoms.length; j++) {
                            if(next.getKey().equals(symptoms[j])) {
                                selectedSymptoms += (i + " ");
                            }
                        }
                        
                        //checkboxVal = request.getParameter(next.getKey());
                        
//                            if(checkboxVal == null) {
//                                checkboxVal = "";
//                            }
//                            
//                            if (checkboxVal.compareTo("on") == 0){
//                                selectedSymptoms += (i + " ");
//                            }
                      
                    }
        
                    confidence.calculateConfidence(selectedSymptoms);
                    
                    TreeMap<Double, ArrayList<String>> results = confidence.getCalculatedConfidenceTree();

                    out.println("Resulting Diseases Listed By Percentage of Confidence:</br>");
                    int a = 0;
                    for (Double key : results.keySet()) {
                        if(a >= 3) {
                            break;
                        }
                        out.println("<br>" + key + "    " + results.get(key) + "</br>");
                        a++;
                    }
                    
                    //out.println("</body>");
                    //out.println("</html>");
                }
            } finally {
                out.close();
            }
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
